package com.woniuxy.controller;

import cn.hutool.json.JSONUtil;
import com.alibaba.druid.support.json.JSONUtils;
import com.woniuxy.common.Result;
import com.woniuxy.common.constant.RedisConstant;
import com.woniuxy.entity.Article;
import com.woniuxy.service.IArticleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 *文章管理
 */
@Api(tags = "文章管理")
@RestController
@RequestMapping("/article")
@Slf4j
public class ArticleController {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private IArticleService articleService;
    /**
     * TOP5
     */
    @ApiOperation("TOP5")
    @GetMapping("/top5List")
    public Result top5List(){
        // 参数1：zset的key；参数2：分值的范围（开始）；参数3：分值的范围（结束）
        // 参数4：获取元素的起始位置； 参数5：返回的行数
        Set<ZSetOperations.TypedTuple> datas = redisTemplate.opsForZSet()
                .reverseRangeByScoreWithScores(RedisConstant.ARTICLE_LIST, 0, Double.MAX_VALUE, 0, 5);
        // 处理结果: 把zset返回的数据，转换为List<Book>
        List<Article> articleList = datas.stream().map(data -> {
            // 把Map数据转换为json字符串
            String jsonString = JSONUtils.toJSONString(data.getValue());
            // 把json字符串转换为Book对象返回
            return JSONUtil.toBean(jsonString, Article.class);
        }).collect(Collectors.toList());
        return Result.ok(articleList);
    }
}
